Micron Document
`:top
La `!machine virtuelle Java`! (en anglais `*Java virtual machine`*, abr. `!JVM`!) est une `F33f`_`[machine virtuelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle]`_`f qui exécute des programmes compilés sous forme de `F33f`_`[bytecode Java`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bytecode_Java]`_`f.

L'appareil est simulé par un logiciel spécifique à chaque `F33f`_`[plateforme`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Plateforme_(informatique)]`_`f ou couple (`F33f`_`[machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine]`_`f/`F33f`_`[système d’exploitation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_d'exploitation]`_`f) et permet aux applications `F33f`_`[Java`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation_Java]`_`f compilées en bytecode de produire les mêmes résultats quelle que soit la plate-forme, tant que celle-ci est pourvue de la machine virtuelle Java adéquate.

La JVM permet d'exécuter d'autres langages que le langage Java (Scala, Kotlin, ...), du moment qu'un compilateur transforme les expressions de cet autre langage en une série d'octets respectant le format binaire d'une classe Java.

La machine virtuelle exécute les instructions données par le bytecode contenu dans la classe Java en suivant le modèle de la `F33f`_`[pile`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pile_(informatique)]`_`f : chaque niveau de pile contient les données propres à chaque opération.

Une spécification de `F33f`_`[Sun`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sun_Microsystems]`_`f`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f] décrit les fonctions et propriétés que doivent respecter toutes les machines virtuelles java. De plus, la plupart de ces machines comportent un `F33f`_`[ramasse-miettes`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Ramasse-miettes_(informatique)]`_`f (la notion est citée dans la spécification`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f], mais sans être formellement rendue obligatoire), ou un `F33f`_`[compilateur à la volée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilation_à_la_volée]`_`f.

Le compilateur Java faisant peu d'optimisations, c'est à la machine virtuelle de les faire, selon les objectifs propres à cette dernière.

>>Contents

• `F0af`_`[HotSpot, la machine virtuelle d'Oracle`#hotspot-la-machine-virtuelle-d-oracle]`_`f
• `F0af`_`[Autres machines virtuelles Java`#autres-machines-virtuelles-java]`_`f
• `F0af`_`[En développement`#en-d-veloppement]`_`f
• `F0af`_`[Abandonnées`#abandonn-es]`_`f
• `F0af`_`[Annexes`#annexes]`_`f
• `F0af`_`[Liens internes`#liens-internes]`_`f
• `F0af`_`[Liens externes`#liens-externes]`_`f
• `F0af`_`[Références`#r-f-rences]`_`f

-─

>>HotSpot, la machine virtuelle d'Oracle

`F33f`_`[HotSpot`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=HotSpot]`_`f est la machine la plus utilisée. Elle a été créée et réalisée par Sun, elle est aujourd'hui propriété d'`F33f`_`[Oracle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_Corporation]`_`f`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f], depuis que cette dernière a racheté Sun. Elle est gratuite, propriétaire jusqu'à la version 6 (stable) et `F33f`_`[libre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_Libre]`_`f à partir de la version 7.

Le 11 novembre 2006, `!Sun Microsystems`! a publié les sources de sa machine virtuelle HotSpot et de son compilateur javac sous licence `F33f`_`[GNU GPL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Licence_publique_générale_GNU]`_`f.

La toute première version ne se comportait que comme un `F33f`_`[interpréteur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Interprète_(informatique)]`_`f. Cette approche était pénalisante, car l'interprète passe plus de temps à interpréter qu'à exécuter. Puis est apparue la `F33f`_`[compilation à la volée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilation_à_la_volée]`_`f, qui traduit le bytecode en `F33f`_`[langage machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_machine]`_`f, et exécute ce langage machine. Ensuite la machine virtuelle est devenue capable de détecter les portions les plus fréquemment utilisées pour concentrer les optimisations sur elles. Elle a été dotée d'un `F33f`_`[profileur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Profilage_de_code]`_`f, et d'optimisations standards comme la mise à plat des boucles. Toutes ces opérations peuvent être faites en plusieurs passes, soit pour les améliorer progressivement, soit pour les annuler si elles se révèlent obsolètes`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f].

>>Autres machines virtuelles Java

>>>En développement

• `F33f`_`[OpenJ9`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=OpenJ9]`_`f, développé par `F33f`_`[IBM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=IBM]`_`f et la `F33f`_`[fondation Eclipse`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fondation_Eclipse]`_`f
• `F33f`_`[JamaicaVM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JamaicaVM]`_`f, machine virtuelle spécialisée dédiée à l'`F33f`_`[électronique embarquée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_embarqué]`_`f et qui prend en compte les contraintes `F33f`_`[temps-réel`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_temps_réel]`_`f des applications
• Platform Prime, développé par Azul

>>>Abandonnées

• Celle de `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f était fournie avec le système d’exploitation `F33f`_`[Windows`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft_Windows]`_`f. Sun pensait que la machine pouvait être `F33f`_`[boguée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bug_informatique]`_`f volontairement pour contrer l’avancée du langage Java (portablité sur plusieurs systèmes d’exploitation donc risque de perte pour Microsoft). À la suite d'un procès gagné par Sun, elle n’est plus fournie avec Windows.
• `F33f`_`[JRockit`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JRockit]`_`f développée initialement par `F33f`_`[BEA`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=BEA_Systems]`_`f maintenant `F33f`_`[Oracle Corporation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_Corporation]`_`f. Elle est principalement utilisée pour `F33f`_`[Weblogic`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Weblogic]`_`f.
• `F33f`_`[Apple`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Apple]`_`f en a créé une pour son système d'exploitation, `F33f`_`[macOS`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=MacOS]`_`f.
• Jikes RVM
• Apache Harmony (en), est un projet de `F33f`_`[plateforme Java`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Plateforme_Java]`_`f de la `F33f`_`[fondation Apache`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fondation_Apache]`_`f contenant une JVM.
• `F33f`_`[GIJ`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=GIJ]`_`f, « sous-projet » de machine virtuelle Java du projet `F33f`_`[GNU`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=GNU]`_`f.
• `F33f`_`[Dalvik`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Dalvik_(machine_virtuelle)]`_`f, machine virtuelle développée par `F33f`_`[Google`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Google]`_`f pour `F33f`_`[Android`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Android]`_`f.
• `F33f`_`[SableVM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=SableVM]`_`f
• JamVM
• Kaffe
• CACAO

>>Annexes

>>>Liens internes

• `F33f`_`[Machine SECD`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_SECD]`_`f

>>>Liens externes

• (en) Spécifications de la JVM
• (en) Liste des machines virtuelles Java

>>>Références

`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f (en) The Java Virtual Machine Specification, Second edition
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f (en) Garbage collection, index lettre G
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f (en) http://openjdk.java.net/groups/hotspot/
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f (en) Java theory and practice : Dynamic compilation and performance measurement

• Portail de l’informatique
• Portail de la programmation informatique

`c`F0af`_`[↑ Back to top`#top]`_`f`a